package com.doctor.windflower_doctor.http.callback;

import com.doctor.windflower_doctor.http.parser.Parser;
import com.doctor.windflower_doctor.http.response.HttpResponseInfo;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;

/**
 *  <p>
 *  功能
 *  </p>
 *  
 *  <p>Copyright  北京亚普拓信息咨询服务有限公司 2014 All right reserved.</p>
 *  @author 皮勉 时间 2014年10月8日 下午4:55:55
 *  @version 1.0 
 *  </br>
 *  最后修改人    无
 * 
 */
public abstract class HttpRequestCallBack<T> extends RequestCallBack<String> {
	private Parser parser;
	private Class<T> targetType;
	public HttpRequestCallBack(Parser parser,Class<T> targetType) {
		this.parser = parser;
		this.targetType=targetType;
	}

	@Override
	public void onFailure(HttpException e, String msg) {
		handleError(e, msg);
	}

	@Override
	public void onSuccess(ResponseInfo<String> info) {
		if (info != null) {
			T result = null;
			if (parser != null) {
				result = parser.parserResult(info.result,targetType);
			}
			HttpResponseInfo<T> responseInfo = new HttpResponseInfo<T>(info,
					result);
			handleResult(responseInfo);
		}
	}

	/**
	 *  <p>
	 *  功能   处理结果
	 *  </p>
	 * @author 皮勉 时间 2014年10月8日 下午5:05:06
	 * @param responseInfo  结果封装
	 */
	protected abstract void handleResult(HttpResponseInfo<T> responseInfo);
	
	/**
	 *  <p>
	 *  功能   处理错误
	 *  </p>
	 * @author 皮勉 时间 2014年10月8日 下午5:05:29
	 * @param e  异常类
	 * @param msg  异常信息
	 */
	protected abstract void handleError(HttpException e, String msg);

}

